﻿<?php

 /**
 * Klasa obslugujaca baze gus tabela gus_jednostki tzn jednostki adminstracyjne wystepujace w polsce
 * Baza ta po wersja 1.0 przewiduje utworzenie tej bazy z tabelami wojewodztwo,miasto,powiat i gmina
 * @version 1.0 16.8.2011 klasa na potrzeby ajaxowego pobierania listy jednostek
 *
 */
class gusJednostki extends Object
{
    public $id;
    public $data;

    /**
     * Pobiera dane obiektu i zwraca w postaci tablicy  metoda ta jest wykonywana dla kazedej klasy w konstruktorze parent czli kl object
     *
     * @return array
     *
     */
    function getData()
    {
        global $_gTables, $db;

        $sql = "SELECT a.*
                FROM gus_jednostki a
                WHERE a.id = '".(int)$this->id."'";
                
        
          
        $wynik = $db->query($sql);  
        
        while ($all=$wynik->fetch_assoc())
        {
               $date[]=$all;
        }

        
        if ( $wynik===false )  
        {
          // genErrorMsg( 1, $db->ErrorMsg(), __FILE__, __FUNCTION__, __LINE__, $sql );  //dodac   
          $date[]='nic'; 
        }
           



        return $date;
    }
 
    /**
     * Zapisuje obiekt w bazie, zmienna $id obiektu bedzie zawierac ID rekordu z bazy jesli zapis sie powiedzie. Jesli klucz id w przekazywanej tablicy bedzie wiekszy od 0 wtedy wykonana zostanie aktualizacja istniejacego rekordu
     *
     * @param array $dane
     * @return bool    Zwraca true jesli udalo sie zapisac obiekt (zmienna $id zawiera wtedy ID rekordu z bazy) lub false jesli nie udalo sie zapisac
     */
    function saveData( $data )
    {          
        global $_gTables, $db;

        if( (int)$data['id'] > 0 )
        {
            
            return self::updateData( $data );
        } 
        foreach($data as $key=>$val)
        {
            if( !is_array($val) )
                $data[$key] = clean_input($val);
                
            $data[$key] = str_replace(';', ',', $data[$key]);
        }
        
        
        /*
        $sql = $db->GetInsertSQL( $_gTables[MIASTO], $data );
//INSERT INTO `miasto` (`id`, `nazwa`) VALUES (10, 'gjgj');
 $table="('";
 foreach ($date as $klucz=>$value)
 {
 $table.='"'.$klucz.'"'    
      
 }       */  
         
        //genErrorMsg( ERROR_DATABASE, print_r($data, 1), __FILE__, __FUNCTION__, __LINE__, $sql );
        
        if ( $db->query( $sql ) )
        {
            //$this->id = $db->Insert_ID();

            return true;
        }else{
            genErrorMsg( ERROR_DATABASE, $db->ErrorMsg(), __FILE__, __FUNCTION__, __LINE__, $sql );
        }
        return false;  
    }
     /*
      $val[]='damian';
$val[]='damian222';  
$val[]='damian333333';  
$valy=implode("','",$val); 
damian','damian222','damian333333 
      */
    /**
     * Aktualizuje dane obiektu w bazie. Tablica wejsciowa musi zawierac klucz 'id'
     *
     * @param array $dane['id']  $dane['nazwatabeliktorej_zmienimy_wartosc']=nowa_wartosc 
     * @return bool
     */
    static function updateData( $date )
    {
        global $_gTables, $db;  
      
        foreach ($date as $kolumna=>$new_value)
        {
            $val[]= $kolumna."='".$new_value."'";  
        }
        $valy=implode(",",$val); 
           
         //update miasto SET id='8',nazwa='nowa555',state=8855 WHERE `id`=8;
        $sql="update gus_jednostki SET $valy WHERE `id`=".$date['id'];
        if ( $db->query( $sql ) )
        {
            

            return true;
        }else{
            
        }
        return false;  
        
    
    }



    /**
     * Zwraca liste obiektow odfiltrowana wg tablicy $filtr, posortowana wg tablicy $sort oraz w przedziale podanym w tablicy $limit
     *
     * @param array $filtr    Tablica asocjacyjna filtrujaca w postaci $filtr['pole'] = 'wartosc'
     * @param array $sort    Tablica asocjacyjna okreslajaca sortowanie, musi zawierac klucz 'sort' okreslajacy po ktorym polu sortujemy oraz klucz 'order' okreslajacy kolejnosc sortowania (ASC/DESC)
     * @param array $limit    Tablica asocjacyjna okreslajaca przedzial zwracanych wynikow, musi zawierac klucz 'start' okreslajacy od ktorego rekordu pobieramy wyniki oraz klucz 'limit' okreslajacy ile rekordow ma zostac zwroconych
     * @return array
     */
    function getList( $filtr=NULL, $sort = NULL, $limit = NULL )
    {
        global $_gTables, $db;

        $sql = 'SELECT   
                    a.*
                FROM 
                    gus_jednostki a
                WHERE 1 ';

        $sql.= self::filterGetList($filtr);

        $sql.= self::getSort($sort);

        $sql.= self::getLimit($limit);

        $wynik = $db->query($sql);  
        
        while ($all=$wynik->fetch_assoc())
        {
               $date[]=$all;
        }
        
        /* 
        if ( $all===false )
        {
            genErrorMsg( 1, $db->ErrorMsg(), __FILE__, __FUNCTION__, __LINE__, $sql );
        }
         */
        return $date;
    }



    /**
     * Zwraca ilosc wszystkich pozycji odpowiadajacych podanemu filtrowi $filtr z pominieciem ograniczen $limit
     *
     * @param array $filtr
     * @return int
     */
    function getListQty( $filtr )
    {
        global $_gTables, $db;

        $sql = "SELECT COUNT(a.id) AS ilosc 
                FROM gus_jednostki a 
                WHERE 1 ";

        if( isset($filtr) && is_array($filtr) )
        {
            $sql.= self::filterGetList($filtr);

        }  
        $val = $db->query($sql);
        //$val=$val->fetch_row();
                while ($all=$val->fetch_assoc())
        {
               $date[]=$all;
        }
       
         
        if ( $val===false )
        {
            //genErrorMsg( ERROR_DATABASE, $db->ErrorMsg(), __FILE__, __FUNCTION__, __LINE__, $sql );
            return 0;
        }else{
            return (int)$date[0]['ilosc'];
        }

        return 0;
    }



    /**
     * Generuje ciag SQL filtrujacy wg podanej tablicy $filtr     METODA NA POTRZEBY GETlIST   SAM MUSZE DOPISAC FILTRY
     *
     * @param array $filtr
     */
   private function filtrGetList($filtr=NULL)
    {
        global $_gTables; //Debug($filtr);
          
        $sql = '';

        if( isset($filtr) && is_array($filtr) )
        {
            // przykladowe filfry
            if( isset($filtr['gmina']) && is_numeric($filtr['gmina']))
                $sql.= " AND a.kod = '".(int)$filtr['kod']."'";

            if( isset($filtr['city']) && $filtr['city']!='' )
                $sql.= " AND a.city = '".mysql_escape_string($filtr['city'])."'";
                
            if( isset($filtr['state']) && $filtr['state']!='' )
                $sql.= " AND a.state = '".(int)($filtr['state'])."' ";
        }

        if( isset($filtr) && is_array($filtr) && isset($filtr['blokada']) && $filtr['blokada'] ){
        }else{
            //$sql.= " AND a.blokada = 0 ";
        }
         
        return $sql;
    }



    /**
     * Usuwa obiekt z bazy
     *
     * @return bool
     */
    function remove()
    {
        global $_gTables, $db;

        $sql = "DELETE FROM miasto WHERE id = '".intval($this->id)."'";

        if ( $db->query($sql) )

            return true;

     }



     /**
     * pobiera same miasta  meto ta ma na ceelu pokazanie filtrowania danych ktore ma zwaracac metoda
     * @param string kolejnosc sortowania ASC DESC 
     * @return array
     */
     function GetWojewodztwa( $order = 'ASC' )
    {
        global $_gTables, $db;
        $sort['sort']='a.nazwa';
        $sort['order']=$order;
        
        $sql = "select 
                        a.id,
                        a.nazwa,
                        a.wojewodztwo as hierarchia_id
                from`gus_jednostki` a
                where 
                    a.gmina=0
                    and a.powiat =0 ";
                    
        $sql.= self::getSort($sort);
        $wynik = $db->query($sql);  
        
        while ($all=$wynik->fetch_assoc())
        {
               $tabData[]=$all;
        }
        
        //foreach($all as $item)
            //$tabData[ $item['id'] ] = $item['nazwa'];
          //  $tabData[] = $item['nazwa'];   
        return $tabData;
    }

    /**
     * powiaty w wojewodztwie po  wojewodztwi ale nie po jego id
     * @param int hierarchi_id wojewodztwa
     * @param string kolejnosc sortowania ASC DESC 
     * @return array
     */
     function GetPowiaty( $hierarchia_id,$order = 'ASC'  )
    {
        global $_gTables, $db;
        $sort['sort']='a.nazwa';
        $sort['order']=$order;
        
        $sql = "     select
                            a.id,
                            a.nazwa,
                            a.powiat as hierarchia_id  
                    from`gus_jednostki` a
                    where     
                            a.gmina=0
                            and a.wojewodztwo = {$hierarchia_id}
                            and a.powiat !=0";
                    
        $sql.= self::getSort($sort);
        $wynik = $db->query($sql);  
        if ( $wynik===false )
        {
            echo 'błąd bazy w pliku:' .__FILE__.'w funkcji '. __FUNCTION__.'w lini '.__LINE__.' polecenie sql '. $sql ;
            return false;
        }
        else 
        {
                while ($all=$wynik->fetch_assoc())
                {
                       $tabData[]=$all;
                } 
                return $tabData; 
        }    
    }
    /**
     * Gmikny w powiacie  po id wojewodztwa
     * @param int $wojewodztwo  
     * @param int $powiat    niestety w tej bazie musze podac powiat i woj   
     * @param string kolejnosc sortowania ASC DESC 
     * @return array
     */
     function GetGminy( $wojewodztwo,$powiat,$order = 'ASC'  )
    {
        global $_gTables, $db;
        $sort['sort']='a.nazwa';
        $sort['order']=$order;
        
        $sql = "  
                select 
                        a.id,
                        a.nazwa,
                        a.gmina as hierarchia_id 
                from`gus_jednostki` a
                where 
                    a.gmina!=0
                     and a.wojewodztwo ={$wojewodztwo}
                     and a.powiat ={$powiat}";
                    
        $sql.= self::getSort($sort);
        $wynik = $db->query($sql);  
        if ( $wynik===false )
        {
            echo 'błąd bazy w pliku:' .__FILE__.'w funkcji '. __FUNCTION__.'w lini '.__LINE__.' polecenie sql '. $sql ;
            return false;
        }
        else 
        {
                while ($all=$wynik->fetch_assoc())
                {
                       $tabData[]=$all;
                } 
                return $tabData; 
        }    
    }
     
     /**
     * Miasta i miejscowosci w danej gmienie
     * @param int $wojewodztwo  
     * @param int $powiat    niestety w tej bazie musze podac powiat i woj   
     * @param string kolejnosc sortowania ASC DESC 
     * @return array
     */
     function GetMiasta( $wojewodztwo,$powiat,$gmina,$order = 'ASC'  )
    {
        global $_gTables, $db;
        $sort['sort']='a.nazwa';
        $sort['order']=$order;
        
        $sql = "  
                select 
                        a.id,
                        a.nazwa,
                        a.gmina
                from`gus_miasta` a
                where  1
                     and a.wojewodztwo ={$wojewodztwo}
                     and a.powiat ={$powiat}
                     and a.gmina ={$gmina}";
                    
        $sql.= self::getSort($sort);
        $wynik = $db->query($sql);  
        if ( $wynik===false )
        {
            echo 'błąd bazy w pliku:' .__FILE__.'w funkcji '. __FUNCTION__.'w lini '.__LINE__.' polecenie sql '. $sql ;
            return false;
        }
        else 
        {
                while ($all=$wynik->fetch_assoc())
                {
                       $tabData[]=$all;
                } 
                return $tabData; 
        }    
    }
     


}


?>
